]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
padOsd: Re-query action labels after mode switches
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 16 Dec 2019 11:39:49 +0000 (12:39 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 17 Dec 2019 12:07:39 +0000 (13:07 +0100)
Do this so the pad OSD is able to update dynamically to mode changes,
showing immediately the new actions for the current mode(s).

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/898

js/ui/padOsd.js

index 55b3d0b8c48e91da6e4d9eec0d170d25b7a0960d..0cd1cbe3ae37ca835d11d0257760b40c39d10f02 100644 (file)
@@ -564,6 +564,14 @@ var PadDiagram = GObject.registerClass({
         this.add_actor(label);
     }
 
+    updateLabels(getText) {
+        for (let i = 0; i < this._labels.length; i++) {
+            let [label, action, idx, dir] = this._labels[i];
+            let str = getText(action, idx, dir);
+            label.set_text(str);
+        }
+    }
+
     _applyLabel(label, action, idx, dir, str) {
         if (str != null) {
             label.set_text(str);
@@ -776,17 +784,29 @@ var PadOsd = GObject.registerClass({
         global.display.request_pad_osd(pad, editionMode);
     }
 
-    _createLabel(type, number, dir) {
+    _getActionText(type, number) {
         let str = global.display.get_pad_action_label(this.padDevice, type, number);
-        let label = new St.Label({ text: str ? str : _("None") });
+        return str ? str : _("None");
+    }
+
+    _createLabel(type, number, dir) {
+        let label = new St.Label({ text: this._getActionText(type, number) });
         this._padDiagram.addLabel(label, type, number, dir);
     }
 
+    _updateActionLabels() {
+        this._padDiagram.updateLabels(this._getActionText.bind(this));
+    }
+
     _onCapturedEvent(actor, event) {
+        let isModeSwitch =
+            (event.type() == Clutter.EventType.PAD_BUTTON_PRESS ||
+             event.type() == Clutter.EventType.PAD_BUTTON_RELEASE) &&
+            this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0;
+
         if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS &&
             event.get_source_device() == this.padDevice) {
             this._padDiagram.activateButton(event.get_button());
-            let isModeSwitch = this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0;
 
             /* Buttons that switch between modes cannot be edited */
             if (this._editionMode && !isModeSwitch)
@@ -795,6 +815,11 @@ var PadOsd = GObject.registerClass({
         } else if (event.type() == Clutter.EventType.PAD_BUTTON_RELEASE &&
                    event.get_source_device() == this.padDevice) {
             this._padDiagram.deactivateButton(event.get_button());
+
+            if (isModeSwitch) {
+                this._endActionEdition();
+                this._updateActionLabels();
+            }
             return Clutter.EVENT_STOP;
         } else if (event.type() == Clutter.EventType.KEY_PRESS &&
                    (!this._editionMode || event.get_key_symbol() === Clutter.KEY_Escape)) {